home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 April: Mac OS SDK / Dev.CD Apr 00 SDK1.toast / Development Kits / Mac OS / UPDATE- Int&Libs 3.2 / CIncludes / URLAccess.h < prev   
Encoding:
C/C++ Source or Header  |  1999-05-25  |  11.5 KB  |  334 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        URLAccess.h
  3.  
  4.      Contains:    URL Access Interfaces.
  5.  
  6.      Version:    Technology:    1.0
  7.                  Release:    Veronica Seed, Use with 3.2 Universal Interfaces
  8.  
  9.      Copyright:    © 1994-1999 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __URLACCESS__
  18. #define __URLACCESS__
  19.  
  20. #ifndef __TYPES__
  21. #include <Types.h>
  22. #endif
  23. #ifndef __FILES__
  24. #include <Files.h>
  25. #endif
  26. #ifndef __CODEFRAGMENTS__
  27. #include <CodeFragments.h>
  28. #endif
  29.  
  30. /* Data structures and types */
  31.  
  32.  
  33. #if PRAGMA_ONCE
  34. #pragma once
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #if PRAGMA_IMPORT
  42. #pragma import on
  43. #endif
  44.  
  45. #if PRAGMA_STRUCT_ALIGN
  46.     #pragma options align=mac68k
  47. #elif PRAGMA_STRUCT_PACKPUSH
  48.     #pragma pack(push, 2)
  49. #elif PRAGMA_STRUCT_PACK
  50.     #pragma pack(2)
  51. #endif
  52.  
  53. typedef struct OpaqueURLReference*         URLReference;
  54.  
  55. enum {
  56.     kURLReplaceExistingFlag        = 1 << 0,
  57.     kURLBinHexFileFlag            = 1 << 1,                        /* Binhex before uploading if necessary*/
  58.     kURLExpandFileFlag            = 1 << 2,                        /* Use StuffIt engine to expand file if necessary*/
  59.     kURLDisplayProgressFlag        = 1 << 3,
  60.     kURLDisplayAuthFlag            = 1 << 4,                        /* Display auth dialog if guest connection fails*/
  61.     kURLUploadFlag                = 1 << 5,                        /* Do an upload instead of a download*/
  62.     kURLIsDirectoryHintFlag        = 1 << 6,                        /* Hint: the URL is a directory*/
  63.     kURLDoNotTryAnonymousFlag    = 1 << 7,                        /* Don't try to connect anonymously before getting logon info*/
  64.     kURLDirectoryListingFlag    = 1 << 8,                        /* Download the directory listing, not the whole directory*/
  65.     kURLReservedFlag            = 1 << 31                        /* reserved for Apple internal use*/
  66. };
  67.  
  68. typedef UInt32                             URLOpenFlags;
  69. enum {
  70.     kURLNullState                = 0,
  71.     kURLInitiatingState            = 1,
  72.     kURLLookingUpHostState        = 2,                            /* NOT IN EXT HEADER*/
  73.     kURLConnectingState            = 3,                            /* NOT IN EXT HEADER*/
  74.     kURLResourceFoundState        = 4,
  75.     kURLDownloadingState        = 5,
  76.     kURLDataAvailableState        = 0x10 + kURLDownloadingState,
  77.     kURLTransactionCompleteState = 6,
  78.     kURLErrorOccurredState        = 7,
  79.     kURLAbortingState            = 8,
  80.     kURLCompletedState            = 9,
  81.     kURLUploadingState            = 10
  82. };
  83.  
  84. typedef UInt32                             URLState;
  85. enum {
  86.     kURLInitiatedEvent            = kURLInitiatingState,
  87.     kURLResourceFoundEvent        = kURLResourceFoundState,
  88.     kURLDownloadingEvent        = kURLDownloadingState,
  89.     kURLAbortInitiatedEvent        = kURLAbortingState,
  90.     kURLCompletedEvent            = kURLCompletedState,
  91.     kURLErrorOccurredEvent        = kURLErrorOccurredState,
  92.     kURLDataAvailableEvent        = kURLDataAvailableState,
  93.     kURLTransactionCompleteEvent = kURLTransactionCompleteState,
  94.     kURLUploadingEvent            = kURLUploadingState,
  95.     kURLSystemEvent                = 29,
  96.     kURLPercentEvent            = 30,
  97.     kURLPeriodicEvent            = 31,
  98.     kURLPropertyChangedEvent    = 32
  99. };
  100.  
  101. typedef UInt32                             URLEvent;
  102. enum {
  103.     kURLInitiatedEventMask        = 1 << (kURLInitiatedEvent - 1),
  104.     kURLResourceFoundEventMask    = 1 << (kURLResourceFoundEvent - 1),
  105.     kURLDownloadingMask            = 1 << (kURLDownloadingEvent - 1),
  106.     kURLUploadingMask            = 1 << (kURLUploadingEvent - 1),
  107.     kURLAbortInitiatedMask        = 1 << (kURLAbortInitiatedEvent - 1),
  108.     kURLCompletedEventMask        = 1 << (kURLCompletedEvent - 1),
  109.     kURLErrorOccurredEventMask    = 1 << (kURLErrorOccurredEvent - 1),
  110.     kURLDataAvailableEventMask    = 1 << (kURLDataAvailableEvent - 1),
  111.     kURLTransactionCompleteEventMask = 1 << (kURLTransactionCompleteEvent - 1),
  112.     kURLSystemEventMask            = 1 << (kURLSystemEvent - 1),
  113.     kURLPercentEventMask        = 1 << (kURLPercentEvent - 1),
  114.     kURLPeriodicEventMask        = 1 << (kURLPeriodicEvent - 1),
  115.     kURLPropertyChangedEventMask = 1 << (kURLPropertyChangedEvent - 1),
  116.     kURLAllBufferEventsMask        = kURLDataAvailableEventMask + kURLTransactionCompleteEventMask,
  117.     kURLAllNonBufferEventsMask    = kURLInitiatedEventMask + kURLDownloadingMask + kURLUploadingMask + kURLAbortInitiatedMask + kURLCompletedEventMask + kURLErrorOccurredEventMask + kURLPercentEventMask + kURLPeriodicEventMask + kURLPropertyChangedEventMask,
  118.     kURLAllEventsMask            = (long)0xFFFFFFFF
  119. };
  120.  
  121. typedef UInt32                             URLEventMask;
  122.  
  123. struct URLCallbackInfo {
  124.     UInt32                             version;
  125.     URLReference                     urlRef;
  126.     const char *                    property;
  127.     UInt32                             currentSize;
  128.     EventRecord *                    systemEvent;
  129. };
  130. typedef struct URLCallbackInfo            URLCallbackInfo;
  131. static const char* kURLURL                        = "URLString";
  132. static const char* kURLResourceSize                = "URLResourceSize";
  133. static const char* kURLLastModifiedTime            = "URLLastModifiedTime";
  134. static const char* kURLMIMEType                    = "URLMIMEType";
  135. static const char* kURLFileType                    = "URLFileType";
  136. static const char* kURLFileCreator                = "URLFileCreator";
  137. static const char* kURLCharacterSet                = "URLCharacterSet";
  138. static const char* kURLResourceName                = "URLResourceName";
  139. static const char* kURLHost                        = "URLHost";
  140. static const char* kURLAuthType                    = "URLAuthType";
  141. static const char* kURLUserName                    = "URLUserName";
  142. static const char* kURLPassword                    = "URLPassword";
  143. static const char* kURLStatusString                = "URLStatusString";
  144. static const char* kURLIsSecure                    = "URLIsSecure";
  145. static const char* kURLCertificate                = "URLCertificate";
  146. static const char* kURLTotalItems                = "URLTotalItems";
  147. /* http and https properties*/
  148. static const char* kURLHTTPRequestMethod        = "URLHTTPRequestMethod";
  149. static const char* kURLHTTPRequestHeader        = "URLHTTPRequestHeader";
  150. static const char* kURLHTTPRequestBody            = "URLHTTPRequestBody";
  151. static const char* kURLHTTPRespHeader            = "URLHTTPRespHeader";
  152. static const char* kURLHTTPUserAgent            = "URLHTTPUserAgent";
  153. static const char* kURLHTTPRedirectedURL        = "URLHTTPRedirectedURL";
  154. /* authentication type flags*/
  155. enum {
  156.     kUserNameAndPasswordFlag    = 0x00000001
  157. };
  158.  
  159. EXTERN_API( OSStatus )
  160. URLGetURLAccessVersion            (UInt32 *                returnVers);
  161.  
  162. #if TARGET_RT_MAC_CFM
  163. #ifdef __cplusplus
  164.     inline pascal Boolean URLAccessAvailable() { return ((URLGetURLAccessVersion != (void*)kUnresolvedCFragSymbolAddress) ); }
  165. #else
  166.     #define URLAccessAvailable()     ((URLGetURLAccessVersion != (void*)kUnresolvedCFragSymbolAddress) )
  167. #endif
  168. #endif  /* TARGET_RT_MAC_CFM */
  169.  
  170. typedef CALLBACK_API( OSStatus , URLNotifyProcPtr )(void *userContext, URLEvent event, URLCallbackInfo *callbackInfo);
  171. typedef CALLBACK_API( OSStatus , URLSystemEventProcPtr )(void *userContext, EventRecord *event);
  172. typedef STACK_UPP_TYPE(URLNotifyProcPtr)                         URLNotifyUPP;
  173. typedef STACK_UPP_TYPE(URLSystemEventProcPtr)                     URLSystemEventUPP;
  174. enum { uppURLNotifyProcInfo = 0x00000FF0 };                     /* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes) */
  175. enum { uppURLSystemEventProcInfo = 0x000003F0 };                 /* pascal 4_bytes Func(4_bytes, 4_bytes) */
  176. #if MIXEDMODE_CALLS_ARE_FUNCTIONS
  177. EXTERN_API(URLNotifyUPP)
  178. NewURLNotifyProc               (URLNotifyProcPtr        userRoutine);
  179. EXTERN_API(URLSystemEventUPP)
  180. NewURLSystemEventProc           (URLSystemEventProcPtr    userRoutine);
  181. EXTERN_API(OSStatus)
  182. CallURLNotifyProc               (URLNotifyUPP            userRoutine,
  183.                                 void *                    userContext,
  184.                                 URLEvent                event,
  185.                                 URLCallbackInfo *        callbackInfo);
  186. EXTERN_API(OSStatus)
  187. CallURLSystemEventProc           (URLSystemEventUPP        userRoutine,
  188.                                 void *                    userContext,
  189.                                 EventRecord *            event);
  190. #else
  191. #define NewURLNotifyProc(userRoutine)                             (URLNotifyUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppURLNotifyProcInfo, GetCurrentArchitecture())
  192. #define NewURLSystemEventProc(userRoutine)                         (URLSystemEventUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppURLSystemEventProcInfo, GetCurrentArchitecture())
  193. #define CallURLNotifyProc(userRoutine, userContext, event, callbackInfo)  CALL_THREE_PARAMETER_UPP((userRoutine), uppURLNotifyProcInfo, (userContext), (event), (callbackInfo))
  194. #define CallURLSystemEventProc(userRoutine, userContext, event)  CALL_TWO_PARAMETER_UPP((userRoutine), uppURLSystemEventProcInfo, (userContext), (event))
  195. #endif
  196. EXTERN_API( OSStatus )
  197. URLSimpleDownload                (const char *            url,
  198.                                  FSSpec *                destination,
  199.                                  Handle                 destinationHandle,
  200.                                  URLOpenFlags             openFlags,
  201.                                  URLSystemEventProcPtr     eventProc,
  202.                                  void *                    userContext);
  203.  
  204. EXTERN_API( OSStatus )
  205. URLDownload                        (URLReference             urlRef,
  206.                                  FSSpec *                destination,
  207.                                  Handle                 destinationHandle,
  208.                                  URLOpenFlags             openFlags,
  209.                                  URLSystemEventProcPtr     eventProc,
  210.                                  void *                    userContext);
  211.  
  212. EXTERN_API( OSStatus )
  213. URLSimpleUpload                    (const char *            url,
  214.                                  const FSSpec *            source,
  215.                                  URLOpenFlags             openFlags,
  216.                                  URLSystemEventProcPtr     eventProc,
  217.                                  void *                    userContext);
  218.  
  219. EXTERN_API( OSStatus )
  220. URLUpload                        (URLReference             urlRef,
  221.                                  const FSSpec *            source,
  222.                                  URLOpenFlags             openFlags,
  223.                                  URLSystemEventProcPtr     eventProc,
  224.                                  void *                    userContext);
  225.  
  226. EXTERN_API( OSStatus )
  227. URLNewReference                    (const char *            url,
  228.                                  URLReference *            urlRef);
  229.  
  230. EXTERN_API( OSStatus )
  231. URLDisposeReference                (URLReference             urlRef);
  232.  
  233. EXTERN_API( OSStatus )
  234. URLOpen                            (URLReference             urlRef,
  235.                                  FSSpec *                fileSpec,
  236.                                  URLOpenFlags             openFlags,
  237.                                  URLNotifyProcPtr         notifyProc,
  238.                                  URLEventMask             eventRegister,
  239.                                  void *                    userContext);
  240.  
  241. EXTERN_API( OSStatus )
  242. URLAbort                        (URLReference             urlRef);
  243.  
  244. EXTERN_API( OSStatus )
  245. URLGetDataAvailable                (URLReference             urlRef,
  246.                                  Size *                    dataSize);
  247.  
  248. EXTERN_API( OSStatus )
  249. URLGetBuffer                    (URLReference             urlRef,
  250.                                  void **                buffer,
  251.                                  Size *                    bufferSize);
  252.  
  253. EXTERN_API( OSStatus )
  254. URLReleaseBuffer                (URLReference             urlRef,
  255.                                  void *                    buffer);
  256.  
  257. EXTERN_API( OSStatus )
  258. URLGetProperty                    (URLReference             urlRef,
  259.                                  const char *            property,
  260.                                  void *                    propertyBuffer,
  261.                                  Size                     bufferSize);
  262.  
  263. EXTERN_API( OSStatus )
  264. URLGetPropertySize                (URLReference             urlRef,
  265.                                  const char *            property,
  266.                                  Size *                    propertySize);
  267.  
  268. EXTERN_API( OSStatus )
  269. URLSetProperty                    (URLReference             urlRef,
  270.                                  const char *            property,
  271.                                  void *                    propertyBuffer,
  272.                                  Size                     bufferSize);
  273.  
  274. EXTERN_API( OSStatus )
  275. URLGetCurrentState                (URLReference             urlRef,
  276.                                  URLState *                state);
  277.  
  278. EXTERN_API( OSStatus )
  279. URLGetError                        (URLReference             urlRef,
  280.                                  OSStatus *                urlError);
  281.  
  282.  
  283. EXTERN_API( OSStatus )
  284. URLIdle                            (void);
  285.  
  286. EXTERN_API( OSStatus )
  287. URLGetFileInfo                    (StringPtr                 fName,
  288.                                  OSType *                fType,
  289.                                  OSType *                fCreator);
  290.  
  291.  
  292. /* Error Codes */
  293. enum {
  294.     kURLInternetAccessErrorCodeBase = -30770,
  295.     kURLInvalidURLReferenceError = kURLInternetAccessErrorCodeBase - 0,
  296.     kURLProgressAlreadyDisplayedError = kURLInternetAccessErrorCodeBase - 1,
  297.     kURLDestinationExistsError    = kURLInternetAccessErrorCodeBase - 2,
  298.     kURLInvalidURLError            = kURLInternetAccessErrorCodeBase - 3,
  299.     kURLUnsupportedSchemeError    = kURLInternetAccessErrorCodeBase - 4,
  300.     kURLServerBusyError            = kURLInternetAccessErrorCodeBase - 5,
  301.     kURLAuthenticationError        = kURLInternetAccessErrorCodeBase - 6,
  302.     kURLPropertyNotYetKnownError = kURLInternetAccessErrorCodeBase - 7,
  303.     kURLUnknownPropertyError    = kURLInternetAccessErrorCodeBase - 8,
  304.     kURLPropertyBufferTooSmallError = kURLInternetAccessErrorCodeBase - 9,
  305.     kURLUnsettablePropertyError    = kURLInternetAccessErrorCodeBase - 10,
  306.     kURLInvalidCallError        = kURLInternetAccessErrorCodeBase - 11,
  307.     kURLFileEmptyError            = kURLInternetAccessErrorCodeBase - 13,
  308.     kURLExtensionFailureError    = kURLInternetAccessErrorCodeBase - 15,
  309.     kURLInvalidConfigurationError = kURLInternetAccessErrorCodeBase - 16,
  310.     kURLAccessNotAvailableError    = kURLInternetAccessErrorCodeBase - 17
  311. };
  312.  
  313.  
  314. #if PRAGMA_STRUCT_ALIGN
  315.     #pragma options align=reset
  316. #elif PRAGMA_STRUCT_PACKPUSH
  317.     #pragma pack(pop)
  318. #elif PRAGMA_STRUCT_PACK
  319.     #pragma pack()
  320. #endif
  321.  
  322. #ifdef PRAGMA_IMPORT_OFF
  323. #pragma import off
  324. #elif PRAGMA_IMPORT
  325. #pragma import reset
  326. #endif
  327.  
  328. #ifdef __cplusplus
  329. }
  330. #endif
  331.  
  332. #endif /* __URLACCESS__ */
  333.  
  334.